home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 1992 August / info-mac-1992.iso / Language (lang) / Lazy-Scheme / Examples / unknowns < prev   
Encoding:
Text File  |  1992-03-05  |  1.4 KB  |  36 lines  |  [TEXT/Help]

  1. {Programming with unknowns: divide each tree leaf be the sum of the leafs in 1 pass}
  2.  
  3.  
  4. (define (rbm l)
  5.   (letrec [((f n rest&maxc)(cons (cons max (0 rest&maxc))
  6.                                  (cond (>? n (-1 rest&maxc)) n (-1 rest&maxc))))
  7.            (rest (reduce f '(() | 0) l))
  8.            (max (-1 rest))]
  9.           (0 rest)))
  10.  
  11.  
  12. (define (rbm l)
  13.   (call/ep (lambda (k)
  14.   (letrec [((f n rest&maxc) (cons (cons max (0 rest&maxc))
  15.                                  (cond (>? n (-1 rest&maxc)) n (-1 rest&maxc))))
  16.            (rest (reduce f '(() | 0) l))
  17.            (max (-1 rest))]
  18.           (k (0 rest))))))
  19. (define feuille? number?)    (define vide? null?)        ;test des arbres    
  20. (define filsg 0)          (define filsd -1)        ;lecture d’un arbre
  21. (define retourne cons)                    ;former une valeur multiple
  22. (define traité 0)        (define somme -1)        ;lecture d’une valeur multiple
  23.  
  24. (define (normalise arbre)
  25.   (letrec [((norm+som arbre)
  26.               (cond (vide? arbre)    (retourne () 0)
  27.                     (feuille? arbre) (retourne (/ arbre SomTotale) arbre)
  28.                     (let [(gauche (norm+som (filsg arbre)))
  29.                           (droite (norm+som (filsd arbre)))]
  30.                          (retourne (cons (traité gauche) (traité droite))
  31.                                    (+    (somme gauche)  (somme droite))))))
  32.            (LesDeux (norm+som arbre))
  33.            (ArbreTraité (traité LesDeux))
  34.            (SomTotale (somme LesDeux))]
  35.            ArbreTraité))
  36.